package com.itheima.health.job;

import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.health.service.SetmealService;
import com.itheima.health.utils.QiNiuUtils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 清理垃圾图片
 */
@Component//使用Componet注解对切面类进行IOC配置
public class CleanImgJob {

    //打印日志
    private static final Logger log = LoggerFactory.getLogger(CleanImgJob.class);

    @Reference
    private SetmealService setmealService;

    //配置scheduler调度容器
    @Scheduled(initialDelay = 3000,fixedDelay = 1800000)
    public void cleanImg(){

        //打印流程日志
        log.info("清理任务开始执行");

        //查询7牛云上的图片
        List<String> img7Niu = QiNiuUtils.listFile();

        //在打印日志中输出7牛云的图片数，打印时进行非空判断
        log.debug("7牛上有{}张图片",null==img7Niu?0:img7Niu.size());

        //查询数据库的图片
        List<String> imgInDB = setmealService.findImgs();

        //在打印日志中输出数据库的图片数，打印时进行非空判断
        log.debug("数据库有{}张图片",null==imgInDB?0:imgInDB.size());

        // 执行removeAll之后，img7Niu剩下的就是7牛上有的但是数据库没有的
        img7Niu.removeAll(imgInDB);

        //在打印日志中，输出要删除的图片有多少张
        log.debug("要删除的图片有{}张",img7Niu.size());

        //把List集合转换成String数组，因为要调用七牛云这个方法必须传数组的参数
        String[] need2Delete = img7Niu.toArray(new String[]{});

        //调用七牛云工具类删除图片
        QiNiuUtils.removeFiles(need2Delete);

        //在打印日志中，输出删除成功的图片有多少张
        log.info("删除{}张图片成功",img7Niu.size());
    }
}
